5
תגובות

שימוש נכון בסינגלטון

פתח OrelBeY ,
class user {
    protected static $instance = null;
    protected $user;

    public static function getInstance($str = "default") {
        if (self::$instance === null)
            self::$instance = new self($str);
        return self::$instance;
    }

    private function __construct($str) {
        $this->str = $str;
    }

    private function __clone() { }
}

$user = user::getInstance(5);
var_dump($user);
unset($user);
$user2 = user::getInstance("Muhahaha");
var_dump($user2);

הערך שהכנסתי לפונקציה ב-user2 לא נתפס באובייקט, מה שאומר שה-$instance לא שווה ל-null. איך אני הופך אותו ל-null ברגע שאני מסיים עם האובייקט הקודם?

5 תשובות

avatar ענה intval ב 30 לאוגוסט 2012 #

אתה לא עושה יוזר סינגלטון.
אתה עושה את החיבור למסד בלבד בתור סינגלטון.

יוזר != מסד

avatar ענה OrelBeY ב 31 לאוגוסט 2012 #

אבל אני רוצה שבכל פעם שאגש ל-user, זה יחזיר לי את אותה מחלקה...

avatar ענה intval ב 31 לאוגוסט 2012 #

אתה לא רוצה :)
לצורך העניין תשכח בכלל ולתמיד מסינגלטונים. זה יוצר יותר בעיות בראש ובקוד מאשר שזה פותר
ומעכשיו והלאה אל תשמש בסינגלטונים. בכלל.

avatar ענה OrelBeY ב 31 לאוגוסט 2012 #

אם אתה אומר. :)
אבל למה לא להשתמש בזה גם עם מסד נתונים?

avatar ענה intval ב 31 לאוגוסט 2012 #

שוב פעם בגלל שזה יוצר יותר בעיות מאשר פותר,
ואם המתכנת לא מסוגל לדמיין ולהעריך את אותן בעיות לאומת יתרונות - עדיף להימנע מסינגלטונים.
שאת זה עדיף לעשות כמעט תמיד